package domain

import (
	"github.com/hlhutu/gormplus"
	"log"
	"ruoyi-go/internal/framework/db"
)

/**
 * 系统岗位表 SysPost
 */
type SysPost struct {
	// 岗位序号
	PostId int64 `json:"postId" gorm:"column:post_id" form:"postId"`

	// 岗位编码
	PostCode string `json:"postCode" gorm:"column:post_code" form:"postCode"`

	// 岗位名称
	PostName string `json:"postName" gorm:"column:post_name" form:"postName"`

	// 岗位排序
	PostSort int `json:"postSort" gorm:"column:post_sort" form:"postSort"`

	// 状态（0正常 1停用）
	Status string `json:"status" gorm:"column:status" form:"status"`
}

// TableName 映射数据库表名
func (m SysPost) TableName() string {
	return "sys_post"
}

// SysPost Model 定义
type sysPostModel struct {
	gormplus.Model[SysPost] // 使用泛型封装基本的 CRUD 操作
}

// SysPostModelInst 单例变量初始化
var sysPostModelInst *sysPostModel

// SysPostModel 获取 SysPost 单例模型
func SysPostModel() *sysPostModel {
	if sysPostModelInst == nil {
		// 初始化 SysPost 模型
		sysPostModelInst = &sysPostModel{Model: gormplus.NewModel(SysPost{}, db.GormDB)}
	}
	return sysPostModelInst
}

func (s *sysPostModel) SelectPostNamesByUsername(username string) []*SysPost {
	var posts []*SysPost
	err := db.GormDB.Table("sys_post p").
		Select("p.post_id, p.post_name, p.post_code").
		Joins("left join sys_user_post up on up.post_id = p.post_id").
		Joins("left join sys_user u on u.user_id = up.user_id").
		Where("u.user_name = ?", username).
		Scan(&posts).Error
	if err != nil {
		log.Println(err)
	}
	return posts
}
